
 1000  *SAVE S.MASK --> INDEX
 1010  *--------------------------------
 1020  TEST   LDY #$01
 1030  .1     TYA
 1040         JSR $FDDA
 1050         TYA
 1060         JSR SMALLEST.WAY
 1070         JSR HEX
 1080         TYA
 1090         JSR WAY.WITH.X
 1100         JSR HEX
 1110         TYA
 1120         JSR WAY.WITHOUT.X
 1130         JSR HEX
 1140         TYA
 1150         JSR ANOTHER.WAY.WITHOUT.X
 1160         JSR HEX
 1170         TYA
 1180         JSR STRAIGHT.TESTING.WAY
 1190         JSR HEX
 1200         JSR $FD8E
 1210         TYA
 1220         ASL
 1230         TAY
 1240         BCC .1
 1250         RTS
 1260  *--------------------------------
 1270  HEX    PHA 
 1280         LDA #"-"
 1290         JSR $FDED
 1300         PLA
 1310         JMP $FDDA
 1320  *--------------------------------
 1330  *   WAY WITH FEWEST BYTES
 1340  *      8 BYTES
 1350  *      MIN:  16 CYCLES
 1360  *      MAX:  65 CYCLES
 1370  *      AVE:  40.5 CYCLES
 1380  *--------------------------------
 1390  SMALLEST.WAY
 1400         LDX #8
 1410  .1     DEX
 1420         ASL
 1430         BCC .1
 1440         TXA
 1450         RTS
 1460  *--------------------------------
 1470  *   FASTER WAY USING X-REGISTER
 1480  *      26 BYTES
 1490  *      MIN: 25 CYCLES
 1500  *      MAX: 42 CYCLES
 1510  *      AVE: 33.5 CYCLES
 1520  *--------------------------------
 1530  WAY.WITH.X
 1540         LDX #0       KEEP INDEX IN X
 1550         CMP #$10     80-40-20-10 / 08-04-02-01
 1560         BCC .1       ...8,4,2,1
 1570         LSR          ...80,40,20,10
 1580         LSR          SHIFT OVER TO 8,4,2,1
 1590         LSR
 1600         LSR
 1610         LDX #4       AND BUMP INDEX BY 4
 1620  .1     CMP #$04     08-04 / 02-01
 1630         BCC .2       ...2,1
 1640         LSR          ...8,4
 1650         LSR          SHIFT OVER TO 2,1
 1660         INX          AND BUMP INDEX BY 2
 1670         INX
 1680  .2     LSR          02 / 01
 1690         BEQ .3       ...01
 1700         INX          ...02, BUMP INDEX
 1710  .3     TXA          GET RESULT
 1720         RTS
 1730  *--------------------------------
 1740  *   WAY WITHOUT USING X-REGISTER
 1750  *      23 BYTES
 1760  *      MIN: 14 CYCLES
 1770  *      MAX: 30 CYCLES
 1780  *      AVE: 22 CYCLES
 1790  *--------------------------------
 1800  WAY.WITHOUT.X
 1810         LSR          40-20-10-08-04-02-01-00
 1820         CMP #$04
 1830         BCC .2       ...2,1,0
 1840         BEQ .3       ...4, SHOULD BE 3
 1850         LSR          20-10-08-04
 1860         LSR          10-08-04-02
 1870         LSR          08-04-02-01
 1880         LSR          04-02-01-00
 1890         CMP #4
 1900         BCC .1       2,1,0 INTO 6,5,4
 1910         LDA #2       4 INTO 7
 1920  .1     ADC #4
 1930  .2     RTS
 1940  .3     SBC #1       4 INTO 3
 1950         RTS
 1960  *--------------------------------
 1970  *   ANOTHER WAY WITHOUT X-REGISTER
 1980  *      32 BYTES
 1990  *      MIN: 14 CYCLES
 2000  *      MAX: 24 CYCLES
 2010  *      AVE: 18.375 CYCLES
 2020  *--------------------------------
 2030  ANOTHER.WAY.WITHOUT.X
 2040         CMP #$08     80-40-20-10-08-04-02-01
 2050         BCC .5       ...4,2,1
 2060         BEQ .4       ...8, SHOULD BE 3
 2070         CMP #$40
 2080         BCC .2       ...20,10
 2090         BEQ .1       ...40
 2100         LDA #7
 2110         RTS
 2120  .1     LDA #6
 2130         RTS
 2140  .2     CMP #$20
 2150         BEQ .3
 2160         LDA #4
 2170         RTS
 2180  .3     LDA #5
 2190         RTS
 2200  .4     SBC #2
 2210  .5     LSR
 2220         RTS
 2230  *--------------------------------
 2240  *   STRAIGHTFORWARD TESTING APPROACH
 2250  *      33 BYTES
 2260  *      MIN:  14 CYCLES
 2270  *      MAX:  27 CYCLES
 2280  *      AVE:  18.5 CYCLES
 2290  *--------------------------------
 2300  STRAIGHT.TESTING.WAY
 2310         CMP #$08
 2320         BCC .5
 2330         BEQ .4
 2340         CMP #$20
 2350         BCC .3
 2360         BEQ .2
 2370         CMP #$80
 2380         BCC .1
 2390         LDA #7
 2400         RTS
 2410  .1     LDA #6
 2420         RTS
 2430  .2     LDA #5
 2440         RTS
 2450  .3     LDA #4
 2460         RTS
 2470  .4     LDA #3
 2480         RTS
 2490  .5     LSR          CONVERT 4,2,1 TO 2,1,0
 2500         RTS
 2510  *--------------------------------

